package cn.kgc.tangcco.configurer;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

/**
 * @author 李昊哲
 * @Description
 * @create 2021/1/7 17:19
 */
@Configuration
//注解开启使用STOMP协议来传输基于代理(message broker)的消息,这时控制器支持使用@MessageMapping,就像使用@RequestMapping一样
@EnableWebSocketMessageBroker
public class WebSocketConfigurer implements WebSocketMessageBrokerConfigurer {
    /**
     * 注册STOMP协议的节点(endpoint),并映射指定的url
     * 注册端点，发布或者订阅消息的时候需要连接此端点
     * setAllowedOriginPatterns 非必须，/**表示允许其他域进行连接
     * withSockJS  表示开始sockejs支持
     */
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 注册一个STOMP的endpoint,并指定使用SockJS协议
        registry.addEndpoint("/endpoint-websocket").setAllowedOriginPatterns("/**").withSockJS();
    }

    /**
     * 配置消息代理(中介)
     * enableSimpleBroker 服务端推送给客户端的路径前缀 第一个参数是广播 第二个参数的点对点
     * setApplicationDestinationPrefixes  客户端发送数据给服务器端的一个前缀 点对点使用的订阅前缀（客户端订阅路径上会体现出来）
     */
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic", "/chat");
        //点对点使用的订阅前缀（客户端订阅路径上会体现出来），不设置的话，默认是/user
        registry.setApplicationDestinationPrefixes("/app");

    }
}
